<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /**
       * 在 JavaScript 语言中，Thunk 函数替换的不是表达式，而是多参数函数，将其替换成一个只接受回调函数作为参数的单参数函数。
       *
       * 任何函数，只要参数有回调函数，就能写成 Thunk 函数的形式。
       */
      // ES6版本
      const Thunk = function(fn) {
        return function(...args) {
          return function(callback) {
            return fn.call(this, ...args, callback);
          };
        };
      };
      function f(a, cb) {
        cb(a);
      }
      const ft = Thunk(f);
      ft(2)(console.log) // 2
    </script>
  </body>
</html>
